home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 17 / Hot Mix 17.iso / HM17_SGI / research / lib / list_alloc.pro < prev    next >
Text File  |  1997-07-08  |  8KB  |  301 lines

  1. ;
  2. ; $Id: list_alloc.pro,v 1.10 1997/03/18 00:08:17 lubos Exp $
  3. ;
  4. ;  WidList
  5. ;   Widget List class library
  6. ;
  7. ; Copyright (c) 1993-1997, Research Systems, Inc.  All rights reserved.
  8. ;   Unauthorized reproduction prohibited.
  9. ;
  10. ; MODIFICATION HISTORY
  11. ;       Written by:     Joshua Goldstein,       12/93
  12. ;
  13. ;
  14.  
  15.  
  16. ;
  17. ;  LIST_Icon
  18. ;       Return the list toolbar icon
  19. ;
  20. FUNCTION LIST_Icon
  21.   RETURN, [ $
  22.     [ 0b, 0b, 0b, 0b ], $
  23.     [ 0b, 0b, 0b, 0b ], $
  24.     [ 252b, 255b, 255b, 63b ], $
  25.     [ 4b, 0b, 64b, 38b ], $
  26.     [ 4b, 0b, 64b, 47b ], $
  27.     [ 228b, 207b, 199b, 63b ], $
  28.     [ 228b, 207b, 199b, 63b ], $
  29.     [ 4b, 0b, 64b, 38b ], $
  30.     [ 4b, 0b, 64b, 38b ], $
  31.     [ 4b, 0b, 64b, 38b ], $
  32.     [ 228b, 255b, 65b, 38b ], $
  33.     [ 228b, 255b, 65b, 38b ], $
  34.     [ 4b, 0b, 64b, 38b ], $
  35.     [ 252b, 255b, 127b, 38b ], $
  36.     [ 252b, 255b, 127b, 38b ], $
  37.     [ 28b, 96b, 120b, 38b ], $
  38.     [ 28b, 96b, 120b, 38b ], $
  39.     [ 252b, 255b, 127b, 38b ], $
  40.     [ 252b, 255b, 127b, 38b ], $
  41.     [ 4b, 0b, 64b, 38b ], $
  42.     [ 228b, 255b, 67b, 38b ], $
  43.     [ 228b, 255b, 67b, 38b ], $
  44.     [ 4b, 0b, 64b, 38b ], $
  45.     [ 4b, 0b, 64b, 38b ], $
  46.     [ 4b, 0b, 64b, 38b ], $
  47.     [ 228b, 255b, 207b, 63b ], $
  48.     [ 228b, 255b, 207b, 63b ], $
  49.     [ 4b, 0b, 64b, 47b ], $
  50.     [ 4b, 0b, 64b, 38b ], $
  51.     [ 252b, 255b, 255b, 63b ], $
  52.     [ 0b, 0b, 0b, 0b ], $
  53.     [ 0b, 0b, 0b, 0b ]  $
  54.   ]
  55. END
  56.  
  57.  
  58. ;
  59. ;  LIST_Copy
  60. ;   Copy a list.  2 copy methods:
  61. ;
  62. ;   if( copy != NULL)       { *copy = *ptr; free(ptr); }
  63. ;   else                    { *(copy = malloc(...)) = *ptr; }
  64. ;
  65. PRO LIST_Copy, Ptr, Copy
  66.     GenCopy, Ptr, Copy, /HASVALUE
  67. END
  68.  
  69.  
  70. ;
  71. ;  TEXT_Destroy
  72. ;   Release resources for the given list widget.
  73. ;
  74. PRO LIST_Destroy, Ptr
  75.     GenDestroy, Ptr, /HASVALUE
  76. END
  77.  
  78.  
  79. ;
  80. ;  LIST_Event
  81. ;   Event handling routine for list dialog
  82. ;
  83. PRO LIST_Event, Event
  84.  
  85.     WIDGET_CONTROL, Event.Id, GET_UVALUE=Ev                 ; Get Event
  86.     WIDGET_CONTROL, Event.Top, GET_UVALUE=Binfo, /NO_COPY   ; Get Dialog Info
  87.     Ptr2Obj, Binfo.ObjPtr, Obj                              ; Get Object
  88.  
  89.     CASE Ev OF
  90.  
  91.     'LITERAL':      BEGIN                   ; UNIMPLEMENTED (IDL v. Literal)
  92.         Obj.ValueType       = 0
  93.         WIDGET_CONTROL, Binfo.EditId, SENSITIVE=0
  94.         END
  95.     'CODEBASED':    BEGIN                   ; UNIMPLEMENTED (IDL v. Literal)
  96.         Obj.ValueType       = 1
  97.         WIDGET_CONTROL, Binfo.EditId, SENSITIVE=1
  98.         END
  99.     'MAINTEXT': WIDGET_CONTROL, Obj.Value1, SET_UVALUE=Event.Value
  100.     'VALUETEXT':Obj.Value2      = Event.Value   ; UNIMPLEMENTED
  101.  
  102.     'FONT':     Obj.Font        = Event.Value
  103.     'NAME':     Obj.Name        = Event.Value   ; Other
  104.     'FRAME':    Obj.FrameSize   = Event.Value
  105.     'UVALUE':   Obj.Uvalue      = Event.Value
  106.     'YSIZE':    Obj.YSize       = Event.Value   ; XY Stuff. Note: No X Size
  107.     'XOFFSET':  Obj.XOffset     = Event.Value
  108.     'YOFFSET':  Obj.YOffset     = Event.Value
  109.  
  110.     'XFONT':    DoXFont, Obj, Binfo.Foci[1]
  111.  
  112.     'DONE':     BEGIN
  113.         Accept, Obj, Binfo.ObjPtr
  114.         WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  115.         WIDGET_CONTROL, Event.Top, /DESTROY
  116.         RETURN
  117.         END
  118.  
  119.     'CANCEL':   BEGIN
  120.         Cancel, Obj, Binfo.ObjPtr
  121.         ; WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  122.         ; WIDGET_CONTROL, Event.Top, /DESTROY
  123.         RETURN
  124.         END
  125.     ELSE:           MESSAGE, 'Unprocessed event: ' + Ev
  126.     ENDCASE
  127.  
  128.     Dirty   = 1
  129.  
  130.     SetNextFocus, Binfo, Event      ; Set next keyboard focus as necessary
  131.     Obj2Ptr, Obj, Binfo.ObjPtr      ; Put object back into pointer
  132.     WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  133. END
  134.  
  135.  
  136. ;
  137. ;  LIST_Build
  138. ;   Create a dialog box a list object.  If ptr is nil then
  139. ;   create the object as well.
  140. ;
  141. PRO LIST_Build, Ptr, ParPtr
  142.  
  143.   COMMON WidEd_Comm
  144.  
  145.     LIST_Alloc, ParPtr, Ptr                 ; Allocate object if necessary
  146.     MgrName = 'WE_LIST' + STRTRIM(Ptr, 2)   ; Create dialog box name
  147.     IF XRegistered(MgrName) THEN RETURN     ; See if it already exists
  148.  
  149.     Title   = GetId(Ptr) + '(Child of ' + GetId(ParPtr) + ')'
  150.     Ptr2Obj, Ptr, Obj
  151.  
  152.     ;   Create dialog box
  153.  
  154.     Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg)
  155.     Foci    = LONARR(7)
  156.  
  157.     Base1   = WIDGET_BASE(Base, /COLUMN, /FRAME)
  158.     Lab     = WIDGET_LABEL(Base1, VALUE="Basic Information")
  159.     BuildEdit, Base1, Obj, _EditId
  160.  
  161.     Foci[0] = Field(Base1, "Y Size:", Obj.YSize, 'YSIZE', SIZE=8, /INT)
  162.     Base2   = WIDGET_BASE(Base1,/ROW)
  163.     Foci[1] = Field(Base2, "Font:", Obj.Font, 'FONT', SIZE=50, /STRING)
  164.     IF !Version.OS NE 'Win32' AND !Version.OS NE 'MacOS' THEN $
  165.         XFontBtn    = WIDGET_BUTTON(Base2, VALUE="XFont", UVALUE="XFONT")
  166.  
  167.     BuildOther, Base1, Obj, Foci, 2
  168.  
  169.     Base1   = WIDGET_BASE(Base, /FRAME, /COLUMN)
  170.     Lab     = WIDGET_LABEL(Base1, VALUE="List Appearance Controls")
  171.     BuildXY, Base1, Obj, Foci, 5, /OFFSET
  172.     BuildOkCancel, Base, Obj
  173.  
  174.     DlgInfo     = {             $
  175.         Foci:       Foci,       $
  176.         EditId:     _EditId,    $
  177.         ObjPtr:     Ptr         $
  178.     }
  179.     Obj.Dialog  = Base
  180.     WIDGET_CONTROL, Base, SET_UVALUE=DlgInfo, /NO_COPY
  181.     WIDGET_CONTROL, Base, /REALIZE
  182.     XMANAGER, MgrName, Base, EVENT_HANDLER='LIST_Event', CLEANUP='MISC_Kill'
  183.     Obj2Ptr, Obj, Ptr
  184. END
  185.  
  186.  
  187. ;
  188. ;  LIST_Save
  189. ;   Save list information to a file.
  190. ;   Store value as well: If value is nil, make up a value.
  191. ;
  192. ;   FORMAT:
  193. ;       <list object>
  194. ;       <number of elements in value>
  195. ;       <value>
  196. ;
  197. PRO LIST_Save, Unit, Ptr
  198.     GenWrite, Unit, Ptr, DEFAULT='<Nil LIST>'
  199. END
  200.  
  201.  
  202. ;
  203. ;  LIST_Restore
  204. ;   Read in a list object from a file
  205. ;
  206. PRO LIST_Restore, Unit, Parent, Ptr
  207.     MISC_Restore, Unit, Parent, Ptr, "LIST", 1
  208. END
  209.  
  210.  
  211. ;
  212. ;  LIST_Generate
  213. ;   Create a list object for previewing
  214. ;
  215. PRO LIST_Generate, Base, Ptr
  216.   COMMON WidEd_Comm
  217.  
  218.     Ptr2Obj, Ptr, Obj
  219.     Id  = 0L            ; Prevent EXECUTE from creating a new variable
  220.  
  221.     GetValue, Obj, Names, '<Nil LIST>'        ; Get Value (or use default)
  222.  
  223.     ;   Generate command string
  224.  
  225.     Cmd = 'Id = WIDGET_LIST(Base,VALUE=Names'
  226.  
  227.     IAddCmd, Cmd, Obj.FrameSize, 'FRAME'
  228.     SAddCmd, Cmd, Obj.Font, 'FONT'
  229.     IAddCmd, Cmd, Obj.YSize, 'YSIZE'
  230.     IAddCmd, Cmd, Obj.XOffset, 'XOFFSET'
  231.     IAddCmd, Cmd, Obj.YOffset, 'YOFFSET'
  232.  
  233.     Obj2Ptr, Obj, Ptr
  234.  
  235.     ; Create LIST widget
  236.  
  237.     IF EXECUTE(Cmd+')') NE 1 THEN BEGIN
  238.         MESSAGE,'Could not create LIST ' + VarName[Ptr]
  239.     ENDIF
  240. END
  241.  
  242.  
  243. ;
  244. ;  LIST_GenWid
  245. ;   Create IDL code for creating a list widget
  246. ;
  247. PRO LIST_GenWid, Unit, Ptr, Parent
  248.  
  249.     Name    = VarId(Ptr)                ; Get variable name of object
  250.     Ptr2Obj, Ptr, Obj                   ; Get object info
  251.  
  252.     ListName    = 'ListVal' + STRTRIM(Ptr,2)    ; Create value name
  253.     SaveStr, Unit, Ptr, Obj, ListName, ""       ; Generate value code
  254.  
  255.     XPRINTF, Unit, FORMAT='("  ",A," = WIDGET_LIST( ",A,",VALUE=",A)', $
  256.         Name, Parent, ListName, /NO_EOL
  257.     SSaveCmd, Unit, Obj.Font, "FONT"
  258.     ISaveCmd, Unit, Obj.FrameSize, "FRAME"
  259.     SSaveCmd, Unit, UValue(Obj, Ptr), "UVALUE"
  260.     ISaveCmd, Unit, Obj.XOffset, "XOFFSET"
  261.     ISaveCmd, Unit, Obj.YOffset, "YOFFSET"
  262.     ISaveCmd, Unit, Obj.YSize, "YSIZE"
  263.     XPRINTF, Unit, ')'
  264.  
  265.     Obj2Ptr, Obj, Ptr
  266. END
  267.  
  268.  
  269. ;
  270. ;  LIST_Alloc
  271. ;       Allocate a list object.  Don't allocate if ptr is non-nil
  272. ;
  273. PRO LIST_Alloc, Parent, Ptr
  274.   COMMON WidEd_Comm
  275.  
  276.     IF KEYWORD_SET(Ptr) NE 0 THEN RETURN    ; if(ptr != NULL) return;
  277.  
  278.     Ptr     = WIDGET_BASE(GROUP=TopDlg)
  279.     ValueId = WIDGET_BASE(GROUP=TopDlg)     ; Make a pointer for the value too
  280.  
  281.     Obj     = {                 $
  282.         WE_LIST,                $
  283.         Type:           'LIST',$
  284.         Parent:         Parent, $ ; Pointer to parent
  285.         Id:             NewId(),$ ; Permanent Id
  286.         Dialog:         0L,     $ ; Save Dialog ID (need for Cut consistency)
  287.         Next:           0L,     $ ; index of next child/free/top
  288.         Name:           '',     $ ; Title or object name
  289.         Font:           '',     $
  290.         FrameSize:      0,      $
  291.         UValue:         '',     $
  292.         Value1:         ValueId,$
  293.         Value2:         '',     $ ; UNIMPLEMENTED and unused
  294.         ValueType:      0,      $ ; UNIMPLEMENTED and unused
  295.         YSize:          1,      $
  296.         XOffset:        0,      $
  297.         YOffset:        0       $
  298.     }
  299.     Obj2Ptr, Obj, Ptr
  300. END
  301.